<!DOCTYPE html>
<html>  
<head>f
	<title>全局作用域</title>
</head>
<body>
<!-- 
作用域
	-一个变量作用的范围   
在js中有两个作用域：1.全局作用域
					2.函数作用于
	-1.全局作用域
		全局作用域在<script>标签中，页面打来全局作用域被 
		-全局作用域，整个页面都是，页面打开全局作用域被创建，页面关闭全局作用域被销毁
		-全局作用域中的变量叫做全局变量，全局变量可以在全局作用域中使用，还可以在函数作用域中使用。
		-在全局作用域中使用，还可以在函数作用域中使用。
		全局作用域中全局对像window，它是由浏览器创建的，我们可以使用。
		-在全局作用域中，声明的变量都会作用为window的属性
		-如果在函数作用域中想使用全局变量 window.变量 就会变成全局变量。	
		-全局作用域中函数会作为window对象属性方法保存通常如果是window.alert(),可以省略window.直接写alert()

		-2.函数作用域（局部作用域）
		函数作用域，就是函数体内（大括号里面）。函数调用时函数作用域开启，函数执行完，函数作用于销毁
		-函数作用域中的变量叫做局部变量，局部变量只能在函数体内使用，不能在全局作用域中使用。





	变量声明提前声明
	 var 声明变量，可以将变量提前
		如果不加var，变量就不会声明提前
		如果先输出变量 在下面var变量，返回undefined
		如果先输出变量 					   在下面并没有var变量，会报错

	函数声明提前
		-当用函数时字面量创建函数时，function fun(){}函数会声明提前，所以函数可以在上面也可以在下面
		-函数表达式创建时，var fun1 = function(){}函数不会声明提前，所以调用是指在下面调用，不能在上面调用

全局作用域
	在js中<script>标签中就是全局作用域，页面打开是全局作用域开启，页面关闭时全局作用域销毁

全局变量
		在全局里作用域中声明的变量，
		在局部作用域中无var声明（直接赋值）

局部变量
	通常是函数体内，调用函数时开启局部作用域，函数执行完毕局部作用域销毁

局部变量
		在局部（函数体内）声明的变量

this：
	浏览器（解析器）在调用函数时每次都会向函数传递一个隐含的参数，这个隐含的参数就是this
	this指向的是一个对象
	这个对象我们称为函数执行上下的对象
	调用方式不同指向的对象不同，
	this：解析器在调用函数时，会传递一个参数，这个参数就是this
	1.在一函数形式调用时，默认this指向window。
	2.对象属性的方法调用时，this指向调用这个方法的对象。

	1.以函数形式调用时，this指向window
	2.以函数属性调用时，this指向调用它的那个对象

工厂模式创建对象
	通过工厂函数可以大批量创建对象
	步骤：1.写一个函数
		  2.在函数中创建对象
		  3.将对象作为返回值返回
		  4.给对象添加属性

构造函数和普通函数的区别
	构造函数就是普通函数，创建时一样
	构造函数名称首字母大写创建要用new
	调用时，普通函数直接调用，构造函数通过关键字new调用
	new构造，没有就是普通
-->
</body>
<script type="text/javascript">
// fun();
// function fun(){
// 	alert('三水');
//}
//函数表达式的方法
//注意：fun1()不能放在var上面
	// function fun1(){alert("康康")};
	// fun1();

// 	 var a = '张';
// 	function fun(){
// 		var a = 3;	
// 	}
// 	fun();
// 	console.log(a);

// //windwo
// 	var a = '小张子';
// 	function can(){
// 		var a = 5;
// 		console.log(window.a);
// 	}
// 	can();

// function fun3(){
// 	function fun4(){
// 		alert('我是fun4');
// 	}
// 	fun4()
// 	alert('我是fun3');
// }
// fun3();

//???
// var a = 123;
// fun();
// function fun(a){
// 	console.log(a);
// 	 a = 456;
// }
// console.log(a)

//没搞明白的
	//function a(){
	//	var b = 'sb';
	//	return b;
	//}
	//console.log(typeof a());//字符串(函数结果类型)
	//console.log(typeof a);//函数
	//fun()调用函数，输出函数返回的结果
	//fun函数（对象）将整个函数输出
	
//找老师
	// var obj;
	// function fun(){
	// 	console.log(111);
	// }
	//  obj = {
	// 	name:'猪八戒',
	// 	sayName:fun
	// }
	// fun();
	// console.log(obj.sayName());

	// console.log(fun == obj.sayName());


	// var tangzen = {
	// 	name:'唐玄宗',
	// 	dolt:fun
	// }
	// console.log(tangzen.name);
	// console.log(tangzen.dolt);
	// var houzi = {
	// 	name:'猴子',
	// 	dolt:fun
	// }
	// var pig = {
	// 	name:'猪八戒',
	// 	dolt:fun
	// }
	// var heiguo = {
	// 	name:'琉璃灯',
	// 	dolt:fun
	// }
	// function con(){
	// 	console.log(this);
	// }
	// con();
// var rel = ceratPerson();
// function ceratPerson(){
// 	var neZha = {
// 		name:"哪吒",
// 		age:3,
// 		sex:"男"
// 	}
// 	console.log(neZha);
// }
// ceratPerson();
// ceratPerson();
// ceratPerson();
// ceratPerson();
// ceratPerson();

// function ren(name,age,aa){
// 	var obj = new Object();
// 		obj.name = name;
// 		obj.age = age;
// 		obj.aa = aa
// 	 console.log(obj0);
// }
//ren('哪吒',6,"啊啊");

function dog(name,age){
	var dog = {
		name:name,
		age:age
	}
	return console.log(dog);
}

dog('阿喵',6);

//1.创建构造函数
//2.创建对象
//3.this指向
//4.返回值return

	function Person(name,age,sex){
		this.name = name;
		this.age = age;
		this.sex = sex;
		return this; 
	}
	// var result = new Person();
	// console.log(result);
	var per = new Person("阿喵",6,"boby")
	console.log(per);

	function Dog(name,age,zhong){
		this.name = name;
		this.age = age;
		this.zhong = zhong;
		return this;
	}
	var dog = new Dog('阿喵',6,"拉布拉多")
	console.log(dog);
</script>
</html>